Q. multi process와 multi thread 비교 설명해 주세요.
🧑🏻💻 Answer.
✅ 의미 비교
multi process는 단일 thread process 여러 개를 병렬적으로 실행하는 것을 말합니다.
multi thread는 하나의 process를 여러 thread로 실행하는 것을 말합니다.
✅ 자원 공유 비교
multi process의 경우 같은 process의 자원을 공유하지 않고 독립적으로 실행됩니다.
multi thread의 경우 같은 process의 자원을 공유하며 실행됩니다.
thread가 공유하는 자원 : 커널 메모리 부분의 PCB
thread가 공유하지 않는 자원 : 사용자 메모리 부분(pc 및 레지스터, 스택, 힙 등).
✅ 안정성 비교
multi process는 하나의 process가 죽더라도 다른 process에 영향을 주지 않아 안정성이 높습니다.
multi thread는 동기화 문제와 하나의 thread 장애로 전체 thread가 종료될 위험이 있습니다.
✅ 비용 비교
multi process는 서로 독립적인 메모리 상태를 갖고 있기 때문에 비교적 많은 메모리 공간과 CPU 시간을 차지합니다.
multi thread는 자원을 공유하기 때문에 비교적 적은 메모리 공간을 차지하고, Context switching이 빠릅니다.
🧑🏻💻 Discussion
✅ 오버헤드 발생 빈도 수 비교
Q. process와 thread에서 context switch가 발생했을 때, 오버헤드가 발생 빈도가 더 높은 처리 과정은 무엇일까?
Answer.
결론적으로 process의 context switch가 오버헤드가 발생 빈도가 더 높습니다.
process에서 context switch가 일어날 때, 운영체제에서는 새로 실행되는 process가 기존에 실행되는 process의 메모리 주소 공간에 침범하는 것을 막기 위해 아래 절차들을 수행합니다.
→ 실행 중이었던 process의 상태를 백업
→ cache 비우기
→ TLB 비우기
→ 가상 메모리 주소에서 물리적인 메모리 주소로 변환하는 역할을 하는 MMU 설정 변경특히 2번과 3번 작업이 비교적 시간이 걸리는 작업이기 때문에, process context switch 작업이 더 오래 걸리게 되고 더 많은 오버헤드가 발생할 수 있습니다.
⚠️ 용어 참고
오버헤드란 프로그램의 실행흐름 도중에 동떨어진 위치의 코드를 실행시켜야 할 때 시간, 메모리, 자원이 추가적으로 사용되는 현상입니다.
context switch 란 흔히 서로 다른 process에 속한 thread끼리 스위칭이 발생할 때를 말합니다.
thread context switch 란 흔히 같은 process에 속한 thread끼리 스위칭이 발생할 때를 말합니다.